1. Preparar (faça ANTES da prova)
curl -fsSL https://moj.naquadah.com.br/moj-comp -o ~/.local/bin/moj-comp && chmod +x ~/.local/bin/moj-comp moj-comp login prova1apc # o login/senha que a organização te entregou moj-comp fetch # baixa TODOS os enunciados p/ ./prova1apc-prova/ (e os exemplos em samples/)
Requisitos: bash, curl, jq e openssl. Toda máquina de laboratório Linux ou macOS tem esses programas. Não precisa de root. Não precisa instalar nada. A CLI é um arquivo só. O comando de login também aceita a URL da prova (moj-comp login https://prova1apc.moj.naquadah.com.br).
fetch logo depois do login. O fetch salva todos os enunciados no disco (HTML e PDF), em todos os idiomas que a prova oferece: A.html é o português, A.en.html é o inglês. Com os enunciados no disco, você continua trabalhando sem rede.No login, a CLI recebe a chave pública do contest e mede o seu relógio contra o do servidor. Esses dois dados armam o modo offline (seção 4). O comando moj-comp doctor confere tudo.
2. Enviar e acompanhar
moj-comp problems # letras, nomes e time-limits moj-comp submit A sol.c # envia e ESPERA o veredicto ali mesmo moj-comp subs # todas as suas submissões e veredictos
A linguagem vem da extensão do arquivo (sol.c, sol.cpp, sol.py, Main.java). Para C++, valem .cpp, .cc, .cxx e .c++. O submit espera o veredicto e imprime o resultado. Você não troca de aba. Você não recarrega a página.
3. Placar, dúvidas, avisos
moj-comp score # o placar, no terminal moj-comp clar ask B "A entrada termina com EOF ou com 0?" moj-comp clar ls # suas perguntas e as respostas moj-comp news # avisos da organização
4. ☠ Caiu a Internet? Respira. Conta no horário certo.
Em prova, o horário da submissão define a penalidade. Uma queda de rede não pode custar minutos. Quando o submit não alcança o servidor, a CLI entra no modo emergencial sozinha:
$ moj-comp submit C sol.cpp ⚠ SEM REDE — ativando o modo emergencial. submissão EMPACOTADA offline: C, sol.cpp, carimbo UTC 14:32:07. ela vale NO HORÁRIO DO CARIMBO quando a rede voltar. Deixe rodando: moj-comp monitor
Depois, deixe o monitor rodando em um terminal. O monitor mostra a fila, tenta reenviar a cada 15 segundos e acompanha os veredictos quando a rede voltar:
$ moj-comp monitor [14:33:02] rede: OFFLINE · fila: 1 pacote(s) 1784561527-000.pkt carimbo 14:32:07 (há 1min) [14:41:17] rede: ONLINE · fila: 1 pacote(s) ✓ 1784561527-000.pkt ACEITA — contabilizada às 14:32:07 UTC (id 3f9a…) veredicto: Accepted
- O horário é confiável por dois motivos. O pacote é cifrado com a chave do contest. O pacote carrega uma âncora de tempo assinada pelo servidor. A organização verifica que a submissão nasceu no horário declarado. O seu relógio pode estar errado: a CLI mede o desvio contra o servidor e carimba o UTC corrigido.
- Seu código também fica protegido. Em um disco de laboratório, outros usuários não conseguem ler o pacote na fila. Só o servidor abre o pacote.
- Quando o servidor aceita o pacote, a submissão entra no placar no horário do carimbo. A penalidade é calculada como se a rede não tivesse caído.
rejeitados/ com o motivo. Mostre esse pacote à organização.5. ⚡ Comandos rápidos
| Comando | O que faz |
|---|---|
| moj-comp login <id|url> | entra no contest (credenciais da organização) |
| moj-comp fetch | baixa TODOS os enunciados, mais os exemplos de cada problema em samples/<letra>/ (seu seguro anti-queda) |
| moj-comp samples <letra> [--dir pasta] | os exemplos de um problema como arquivos: samples/<letra>/<nome>.in e .out — rode o seu programa neles antes de enviar |
| moj-comp statement <letra> [--lang en|es] | baixa SÓ um enunciado (HTML e PDF, se houver). Sem --lang: todos os idiomas que a prova oferece (A.html, A.en.html). Com um idioma que a prova não oferece, a CLI recusa e lista os disponíveis |
| moj-comp problems · score · news | problemas/TLs · placar · avisos |
| moj-comp submit <letra> <arquivo> | envia + espera o veredicto (modo offline entra sozinho) |
| moj-comp subs | suas submissões e veredictos |
| moj-comp clar ls | ask <letra|geral> <texto> | dúvidas p/ a organização |
| moj-comp outbox · sync · monitor | fila offline · reenviar já · VIGIA durante a queda |
| moj-comp time · doctor · update | relógio · diagnóstico · auto-atualização (a CLI avisa sozinha quando há versão nova) |
6. 💡 Dicas
- Rode
fetchlogo após o login. Enunciado no disco sobrevive a qualquer queda. - Durante a queda, continue programando e enviando. Cada
submitadiciona um pacote carimbado à fila. Omonitorentrega todos os pacotes em ordem quando a rede volta. - O
moj-comp timediz se o seu relógio está errado. Você não precisa de root: a CLI corrige os carimbos sozinha. - A prova usa gate de navegador por sede? Rode a CLI na máquina de prova. A CLI lê o User-Agent da imagem da sede em
/etc/moj/user-agente o manda junto da própria marca (moj-comp/build). A CLI passa no gate e divide a chave de máquina com o navegador. De outra máquina, o login dá 403ua_gate. Isso é intencional. Omoj-comp doctormostra o User-Agent em uso. - A página web e a CLI usam a mesma conta. Você pode usar as duas ao mesmo tempo: o navegador para ler, o terminal para enviar.
Manual do competidor (o lado da página web) · Documentação completa